import graphs.*;
import inout.Read;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe Main
 * @author Fastre Ludovic, Ballarini Robin, Antoine Walsdorff
 * @version 16/12/2013
 */
public class Main {

	public static void main(String[] args) throws IOException
	{	
		int n=1;
		int i = 0;
		long duree[] = new long[n];
		while(i<n){
			
			if(args.length != 1)
			{
				System.err.println(args.length+" arguments. Il faut 1 nom de fichier pour que le programme fonctionne.");
				System.exit(1);
			}

			List <String[]> component = new ArrayList<String[]>();
			Read.openReader(args[0]);
			String line;
			while((line = Read.readInstruction()) != null)
			{
				component.add(line.split("\t"));
			}
			Read.closeReader();

			//Création du graphe
			Graph<Integer, Integer> graph = new Graph<Integer, Integer>();

			// Ajout des noeuds
			for (String[] strings : component) {
				int id0=Integer.parseInt(strings[0]);
				int id1=Integer.parseInt(strings[1]);
				if(graph.getVertex(id0)==null){
					graph.insertVertex(id0);
				}
				if(graph.getVertex(id1)==null){
					graph.insertVertex(id1);
				}
			}

			// Ajout des aretes
			for (String[] strings : component) {
				graph.insertEdge(graph.getVertex(Integer.parseInt(strings[0])), graph.getVertex(Integer.parseInt(strings[1])), Integer.parseInt(strings[2]));
			}
			// Kruskal
			long start = System.nanoTime();
			Graph<Integer, Integer> res = graph.kruskalAlgo();
			duree[i] = System.nanoTime() - start;
			int poidsTotal = 0;
			System.out.println(" --- Après Kruskal ---");
			System.out.println("");
			System.out.println("Ville1 - Ville2 - Poids");
			for(Edge<Integer, Integer> edge : res.edges()){
				poidsTotal += (int) edge.getWeight();
				System.out.println("   "+edge.getFirstVertex().getID() + "   -   " + edge.getSecondVertex().getID() + "    -   " + edge.getWeight());
			}
			
			System.out.println("");
			System.out.println("Poids total --> "+poidsTotal);
			i++;
		}
		i=0;
		long sum = 0;
		while(i<n){
			sum += duree[i];
			i++;
		}
		double average = sum / n;
		System.out.println("Temps moyen : "+ average);
		
	}
}
